var dondeestoy_h=function(){
	this.check_compatibilidad=dondeestoy_c.check_compatibilidad;
	this.init=dondeestoy_c.init;
	this.getPosicion=dondeestoy_c.getPosicion;
	this.storePosicion=dondeestoy_c.storePosicion;
	this.centerGoogleMapsMarker=dondeestoy_c.centerGoogleMapsMarker;
	this.marcadoresPendientes=dondeestoy_c.marcadoresPendientes;
	this.callbacks=dondeestoy_c.callbacks;
	this.runcallbacks=dondeestoy_c.runcallbacks;
	
	this.init();
}



var dondeestoy_c={
	DDBB:{
		objects:[]
	},
	marcadoresPendientes:[],
	callbacks:[],
	init:function(){
		dondeestoy_c.DDBB.objects.push(this);
		this.payID=dondeestoy_c.DDBB.objects.length-1;
		
		
		this.compatible=false
		this.lastPosRefresh=new Date(0);
		
		this.check_compatibilidad();
	},
	check_compatibilidad:function(){
		if(navigator.geolocation){
			this.compatible=true;
		}	
	},
	centerGoogleMapsMarker:function(marcador,callback){
		if(!this.compatible) return false;
		var d=new Date();
		if((d.getTime()-this.lastPosRefresh.getTime())>6000){
			this.marcadoresPendientes.push(marcador);
			this.callbacks.push(callback);
			this.getPosicion();
		}
		else {
			var centro=new google.maps.LatLng(this.posicion.coords.latitude, this.posicion.coords.longitude);
			marcador.setPosition(centro);
			this.runcallbacks();
		}
	},
	runcallbacks:function(){
		for(var i=0;i<this.callbacks.length;i++){
			switch(typeof(this.callbacks[i])){
				case "string":
					eval(this.callbacks[i]);
					break;
			}
		}
		this.callbacks=[];
	},
	getPosicion:function(callbackOK, callbackError,options){
		if(!this.compatible){
			return false;
		}
		if(!callbackOK){
			callbackOK=dondeestoy_c.posCallbackOkHandler;
		}
		if(!callbackError){
			callbackError=dondeestoy_c.posCallbackErrorHandler;
		}
		if(!options){
			options={};
		}
		navigator.geolocation.getCurrentPosition(callbackOK,callbackError,options);
	},
	storePosicion:function(pos){
		this.posicion=pos;
		this.lastPosRefresh=new Date();
		for(var i=0;i<this.marcadoresPendientes.length;i++){
			this.centerGoogleMapsMarker(this.marcadoresPendientes[i]);
		}
		this.runcallbacks();
		this.marcadoresPendientes=[];
	},
	posCallbackOkHandler:function(pos){
		for(var i =0;i<dondeestoy_c.DDBB.objects.length;i++){
			dondeestoy_c.DDBB.objects[i].storePosicion(pos);
		}
	},
	posCallbackErrorHandler:function(error){
		switch(error.code){
			case 1:
			  alert("Get Position Error: The user has denied the access");
			default:
				alert("unknow error: "+error.code);
		}
	}
}